# tuple 元祖，和list一样也是一个有序容器。下标从0开始
# tuple和list可以互相转换，区别是tuple是固定不变的，而list是可以的。但tuple的性能是list的数倍

# 转换tuple为list
t = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
list = list(t)
print(t)
print(list)

# count() 返回某个元素的个数
nums = (0,1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1)
print(nums.count(1))
print(nums.count(99)) # 没有就返回0

# tuple 长度
print(len(nums))

# index() 返回指定元素的下标
print(nums.index(1)) # 多次出现，返回第一次出现的位置
# 不存在的元素则会报异常
# print(nums.index(99))

# 单个元素的tuple，在解析时的变成了运算符。因为()既可以表示tuple，又可以作为括号表示运算时的优先级，
# 结果(1)被Python解释器计算出结果 1，导致我们得到的不是tuple，而是整数 1。
a = ()
print(a)
b = (1)
print(b)
c = (1,)
print(c)

# 对于tuple，它和list一个最大的不同点就是tuple是不可变的，tuple里面的元素，也是不可替换的。
# 但是这针对的是仅包含基础数据类型（数字类型、布尔类型、字符串类型）的数据，对于组合数据类型，则不受这个约束。
T = (1, 'CH', [3, 4])
L = T[2]
print(L)
# 尝试替换L中的元素,但是直接替换list是不行的
L[1] = 40
print(L) # ==> [3, 40]
print(T) # ==> (1, 'CH', [3, 40])

T = (1, 'CH', [3, 4])
L2 = [3, 40]
# 尝试替换tuple中的list
T[2] = L2
# 报错
#Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
#TypeError: 'tuple' object does not support item assignment

